'use strict'
const co = require('co')
const prompt = require('co-prompt') // 获取用户输入
const config = require('../templates')
const chalk = require('chalk') // 格式化输出日志的颜色
const fs = require('fs')

/** 
 * 使用生成器函数和yield异步获取用户输入的值
 */
module.exports = () => {
  co(function*() {

    // 分步接收用户输入的参数
    let tplName = yield prompt('Template name: ') // 获取模板名称
    let gitUrl = yield prompt('Git https link: ') // 获取模板的git地址（https）
    let description = yield prompt('description: ') // 设置分支名称

    // 避免重复添加
    if (!config.tpl[tplName]) {
      config.tpl[tplName] = {}
      config.tpl[tplName]['url'] = gitUrl.replace(/[\u0000-\u0019]/g, '') // 过滤unicode字符
      config.tpl[tplName]['description'] = description
    } else {
      console.log(chalk.red('Template has already existed!'))
      process.exit() // 结束操作
    }

    // 把模板信息写入templates.json
    fs.writeFile(__dirname + '/../templates.json', JSON.stringify(config, null, 2), 'utf-8', (err) => {
      if (err) console.log(err)
      console.log(chalk.green('New template added!\n'))
      console.log(chalk.grey('The last template list is: \n'))
      console.log(config)
      console.log('\n')
      process.exit()
    })
  })
}
